//package yuhao.service;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.data.redis.core.*;
//import org.springframework.stereotype.Component;
//
//import java.util.Collection;
//import java.util.Date;
//import java.util.Set;
//import java.util.concurrent.TimeUnit;
//import java.util.stream.Collectors;
//import java.util.stream.Stream;
//
//@Component
//public class RedisService {
//    @Autowired
//    private RedisTemplate<String, String> redisTemplate;
//
//    /**
//     * 默认过期时长，单位：秒
//     */
//    public static final long DEFAULT_EXPIRE = 60 * 60 * 24;
//
//    /**
//     * 不设置过期时长
//     */
//    public static final long NOT_EXPIRE = -1;
//
//    /**
//     * 对hash类型的数据操作
//     *
//     * @param redisTemplate
//     * @return
//     */
//    @Bean
//    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
//        return redisTemplate.opsForHash();
//    }
//
//    /**
//     * 对redis字符串类型数据操作
//     *
//     * @param redisTemplate
//     * @return
//     */
//    @Bean
//    public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
//        return redisTemplate.opsForValue();
//    }
//
//    /**
//     * 对链表类型的数据操作
//     *
//     * @param redisTemplate
//     * @return
//     */
//    @Bean
//    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
//        return redisTemplate.opsForList();
//    }
//
//    /**
//     * 对无序集合类型的数据操作
//     *
//     * @param redisTemplate
//     * @return
//     */
//    @Bean
//    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
//        return redisTemplate.opsForSet();
//    }
//
//    /**
//     * 对有序集合类型的数据操作
//     *
//     * @param redisTemplate
//     * @return
//     */
//    @Bean
//    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
//        return redisTemplate.opsForZSet();
//    }
//
//    /**
//     * 是否存在 对应的key
//     * @param key
//     * @return
//     */
//    public boolean existsKey(String key) {
//        return redisTemplate.hasKey(key);
//    }
//
//    /**
//     * 重名名key，如果newKey已经存在，则newKey的原值被覆盖
//     *
//     * @param oldKey
//     * @param newKey
//     */
//    public void renameKey(String oldKey, String newKey) {
//        redisTemplate.rename(oldKey, newKey);
//    }
//
//    /**
//     * newKey不存在时才重命名
//     *
//     * @param oldKey
//     * @param newKey
//     * @return 修改成功返回true
//     */
//    public boolean renameKeyNotExist(String oldKey, String newKey) {
//        return redisTemplate.renameIfAbsent(oldKey, newKey);
//    }
//
//    /**
//     * 删除key
//     *
//     * @param key
//     */
//    public void deleteKey(String key) {
//        redisTemplate.delete(key);
//    }
//
//    /**
//     * 删除多个key
//     *
//     * @param keys
//     */
//    public void deleteKey(String... keys) {
//        Set<String> kSet = Stream.of(keys).map(k -> k).collect(Collectors.toSet());
//        redisTemplate.delete(kSet);
//    }
//
//    /**
//     * 删除Key的集合
//     *
//     * @param keys
//     */
//    public void deleteKey(Collection<String> keys) {
//        Set<String> kSet = keys.stream().map(k -> k).collect(Collectors.toSet());
//        redisTemplate.delete(kSet);
//    }
//
//    /**
//     * 设置key的生命周期
//     *
//     * @param key
//     * @param time
//     * @param timeUnit
//     */
//    public void expireKey(String key, long time, TimeUnit timeUnit) {
//        redisTemplate.expire(key, time, timeUnit);
//    }
//
//    /**
//     * 指定key在指定的日期过期
//     *
//     * @param key
//     * @param date
//     */
//    public void expireKeyAt(String key, Date date) {
//        redisTemplate.expireAt(key, date);
//    }
//
//    /**
//     * 查询key的生命周期
//     *
//     * @param key
//     * @param timeUnit
//     * @return
//     */
//    public long getKeyExpire(String key, TimeUnit timeUnit) {
//        return redisTemplate.getExpire(key, timeUnit);
//    }
//
//    /**
//     * 将key设置为永久有效
//     *
//     * @param key
//     */
//    public void persistKey(String key) {
//        redisTemplate.persist(key);
//    }
//
//
//}